package com.ruoyi.durian.service;

import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.durian.domain.LlDriver;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.durian.domain.vo.SendMessageReesultVo;

import java.util.List;

/**
 * @author lenovo
 * @description 针对表【ll_driver(司机表)】的数据库操作Service
 * @createDate 2024-07-26 16:17:15
 */
public interface LlDriverService extends IService<LlDriver> {

    /**
     * 向redis实时添加司机坐标
     *
     * @param message
     */
    void addDriver(String message);

    /**
     * 移除司机
     */
    void removeDiver();

    /**
     * 初始化订单
     *
     * @param message
     */
    void createBeforeOrder(String message);

//    /**
//     * 生成前等待订单
//     */
//    void saveOrder(Integer startAddressId, Integer endAddressId, Integer orderType, String startTime, Integer friendId);

    /**
     * 司机附近订单列表
     *
     * @param mapX 横坐标
     * @param mapY 纵坐标
     * @return
     */
    List orderList(String mapX, String mapY);

    /**
     * 司机抢单
     *
     * @return
     */
    AjaxResult robOrder(Integer orderId, Integer userId);

    /**
     * 取消订单
     *
     * @param orderId
     * @return
     */
    AjaxResult closeOrder(Integer orderId, Integer userId);

    /**
     * 司机创建连接将接单状态同步到redis
     *
     * @param userId
     */
    void createDriver(Integer userId);

    /**
     * 确认乘客上车
     *
     * @param orderId
     * @param phoneEnd
     * @return
     */
    AjaxResult confirmOrder(Integer orderId, String phoneEnd);

    /**
     * 司机到达乘客上车位置
     *
     * @param orderId
     * @return
     */
    AjaxResult waitlngAfterOrder(Integer orderId);

    /**
     * 乘客到达目的地
     *
     * @param orderId
     * @return
     */
    AjaxResult oevrOrder(Integer orderId);

    /**
     * 司机和用户聊天
     * @param message
     */
    void driverChat(String message);

    /**
     * 用户和司机聊天
     * @param message
     */
    void userChat(String message);

    /**
     * 重连之后
     * @param userId
     */
    void beforeCall(Integer userId);


    /**
     * 客服聊天
     * @param message
     * @return
     * @throws NoApiKeyException
     * @throws InputRequiredException
     */
    AjaxResult callWithOthers(String message) throws NoApiKeyException, InputRequiredException;

    /**
     * 聊天界面信息展示
     * @param orderId
     * @return
     */
    List<SendMessageReesultVo> findCallWith(Integer orderId, Integer pageNumber, Integer pageSize);
}
